package beans;

import java.util.*;
import java.sql.*;
import dbUtil.*;
import utils.*;
import iteradores.IteradorRecurso;

/**
 * Clase que representa el bean de la tabla Recurso de la BD
 * @author José Giménez, Gustavo Planás, Esteban Benítez
 */
public class Recurso extends PgAbm implements Abm {

    ResultSet rs_recurso;
    private Hashtable th_recurso = new Hashtable();
    /**
     * Constructor de la clase Permiso
     */
    public Recurso() {
        // Seteamos el nombre de la tabla a consultar
        super.setTableName("recurso");

        // Se establecen los campos de la tabla
        ArrayList array_campos = new ArrayList();
        array_campos.add("idrecurso");
        array_campos.add("descripcion");
        array_campos.add("movilidad");
        array_campos.add("estado");
        array_campos.add("idtiporecurso");
        array_campos.add("idoperador");
        

        // Se establece la clave
        ArrayList array_claves = new ArrayList();
        array_claves.add("idrecurso");

        // Inicializamos el hash que contendra los valores de la tabla
        super.initMapping();

        // Se establecen estos valores en el padre
        super.setCampos(array_campos);
        super.setClaves(array_claves);

        //Setea qué secuenciador utiliza la tabla
        super.setSequence("idrecurso", "recurso_idrecurso_seq");
    }

    /**
     * Obtiene el ID del recurso
     * @return ID del recurso
     */
    public String getIdRecurso() {
        return (String) getMapValue("idrecurso");
    }

    /**
     * Setea el ID del recurso
     * @param valor Nueva descripción del permiso
     */
    public void setIdRecurso(String idrecurso) {
        setMapValue("idrecurso", idrecurso);
    }

    /**
     * Obtiene la descripción del recurso
     * @return Descripción del recurso
     */
    public String getDescripcion() {
        return (String) getMapValue("descripcion");
    }

    /**
     * Setea la descripción del permiso
     * @param valor Nueva descripción del permiso
     */
    public void setDescripcion(String descripcion) {
        setMapValue("descripcion", descripcion);
    }

    /**
     * Obtiene si es móvil o no el recurso
     * @return Tipo de movilidad del recurso
     */
    public String getMovilidad() {
        return (String) getMapValue("movilidad");
    }

    /**
     * Setea el tipo de movilidad del recurso
     * @param valor Nueva movilidad del recurso
     */
    public void setMovilidad(String movilidad) {
        setMapValue("movilidad", movilidad);
    }

    /**
     * Obtiene el estado del recurso
     * @return Estado del recurso
     */
    public String getEstado() {
        return (String) getMapValue("estado");
    }

    /**
     * Setea el estado del recurso
     * @param valor Nuevo estado del recurso
     */
    public void setEstado(String estado) {
        setMapValue("estado", estado);
    }

    /**
     * Obtiene el ID del tipo del recurso
     * @return ID del tipo del recurso
     */
    public String getIdTipoRecurso() {
        return (String) getMapValue("idtiporecurso");
    }

    /**
     * Setea el ID del tipo del recurso
     * @param valor Nuevo ID del tipo del recurso
     */
    public void setIdTipoRecurso(String idtiporecurso) {
        setMapValue("idtiporecurso", idtiporecurso);
    }

    /**
     * Setea el ID del usuario operador
     * @param valor Nuevo ID del usuario operador
     */
    public void setIdOperador(String idoperador) {
        setMapValue("idoperador", idoperador);
    }
    
    /**
     * Obtiene el iterador de la clase Recurso
     * @return Iterador de la clase Recurso
     * @throws java.lang.Exception
     */
    public Iterador getIterator() throws Exception {
        ResultSet rs_datos = super.getResultSet();
        IteradorRecurso iter = new IteradorRecurso(rs_datos);
        return iter;
    }
    
    public int getRecursos() throws Exception {
        String sql_query = "";
        int cant_filas;
        Hashtable th_aux = new Hashtable();

        sql_query = "select * from recurso order by 2; ";

        sql_query += getLimitOffset();

        Statement stm = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
                ResultSet.CONCUR_READ_ONLY);

        // Se ejecuta la consulta y se recupera el ResultSet        
        System.out.println("SQL: " + sql_query);
        rs_recurso = stm.executeQuery(sql_query);

        cant_filas = 0;
        if (rs_recurso.last()) {
            cant_filas = rs_recurso.getRow();
            rs_recurso.beforeFirst();
        }

        if (rs_recurso != null) {
            while (rs_recurso.next()) {
                th_aux.put(rs_recurso.getString(1), rs_recurso.getString(2));
            }
            th_recurso = th_aux;
        }

        System.out.println("Cantidad Filas: " + cant_filas);
        return cant_filas;
    }
    
    public Iterador getIteratorAll() throws Exception {
        IteradorRecurso iter = new IteradorRecurso(rs_recurso);
        return iter;
    }
}